home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 February / EnigmA AMIGA RUN 15 (1997)(G.R. Edizioni)(IT)[!][issue 1997-02][PLANET CD V].iso / enigma / earcd / utility / utilcli / abortpkt.lzh / AbortPkt / newabortpkt.c < prev    next >
C/C++ Source or Header  |  1996-11-07  |  1KB  |  46 lines

  1.  
  2. #include <dos/dos.h>
  3. #include <exec/memory.h>
  4. #include <proto/exec.h>
  5. #include <proto/dos.h>
  6.  
  7. #include "jumptable.h"
  8. #include "action_abort.h"
  9.  
  10. extern UBYTE *JTName;
  11.  
  12. VOID ASM
  13. AbortPktR (register __d1 struct MsgPort *port, register __d2 struct DosPacket *pkt)
  14. {
  15.   struct SignalSemaphore *jt;
  16.   struct StandardPacket *sp;
  17.   struct MsgPort *mp;
  18.  
  19.   if (jt = FindSemaphore (JTName))
  20.     ObtainSemaphoreShared (jt);
  21.   else
  22.     return;
  23.  
  24.   if (mp = CreatePort (NULL, 0))
  25.   {
  26.     if (sp = AllocMem (sizeof (struct StandardPacket), MEMF_CLEAR | MEMF_PUBLIC))
  27.     {
  28.       sp -> sp_Msg.mn_Length = sizeof (struct StandardPacket);
  29.       sp -> sp_Msg.mn_Node.ln_Name = (char *) &sp -> sp_Pkt;
  30.       sp -> sp_Pkt.dp_Link = &sp -> sp_Msg;
  31.       sp -> sp_Pkt.dp_Port = mp;
  32.       sp -> sp_Pkt.dp_Type = ACTION_ABORT;
  33.       sp -> sp_Pkt.dp_Arg1 = (LONG) pkt;
  34.       SendPkt (&sp -> sp_Pkt, port, mp);
  35.       do
  36.         WaitPort (mp);
  37.       while (!GetMsg (mp));
  38.  
  39.       FreeMem (sp, sizeof (struct StandardPacket));
  40.     }
  41.     DeletePort (mp);
  42.   }
  43.  
  44.   ReleaseSemaphore (jt);
  45. }
  46.